#ifndef __SERIALIZABLE_H__
#define __SERIALIZABLE_H__

#include <string>
using std::string;
#include <sstream>
using std::stringstream;
#include <vector>
using std::vector;

//! Basisklasse voor serializeerbare objecten. (objecten om in een bestand te schrijven of door te sturen via netwerk)

class Serializable
{
public:
	virtual ~Serializable() {}
	virtual string serialize() const = 0;
	virtual bool unserialize(const string& serial) = 0;

protected:
	template <class T>
	string toString(const T& t) const
	{ 
		std::stringstream ss;
		ss << t;
		return ss.str();
	}

	template<typename T>
 	void convertString(const std::string& s, T& x)
 	{
   		std::istringstream i(s);
   		i >> x;
	}

	vector<string> splitString(const string& omTeSplitten, char seperator = ':')
	{
		vector<string> result;
		size_t begin = 0;
		for(size_t i = 0; i < omTeSplitten.length(); i++)
			if( omTeSplitten[i] == seperator )
			{
				result.push_back( omTeSplitten.substr(begin, i - begin) );
				begin = i + 1;
			}

		result.push_back( omTeSplitten.substr(begin) );

		return result;
	}
};

#endif
